package controllers; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.Map.Entry; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import models.Dictionary; import views.DictionaryFrame; import views.MessageDialogs; public class DictionaryFrameController { private DictionaryFrame frame = new DictionaryFrame(); // illegal construct // Compile Time Error: The constructor Dictionary() is not visible // private Dictionary dictionary = new Dictionary(); private Dictionary dictionary = Dictionary.getInstance(); public DictionaryFrameController() { frame.setAddWordActionListener(new AddWordButtonActionListener()); frame.setAddSynButtonActionListener(new AddSynButtonActionListener()); frame.setDelWordButtonActionListener(new DelWordButtonActionListener()); frame.setDeleteSynButtonActionListener(new DeleteSynButtonActionListener()); frame.setSearchActionListener(new SearchButtonActionListener()); frame.setPopulateActionListener(new PopulateButtonActionListener()); this.dictionary = JSONParser.readFromJson(); // printDictionary(); } public void printDictionary() { DefaultTableModel dm = ((DefaultTableModel) DictionaryFrame.getTable().getModel()); int rowCount = dm.getRowCount(); for (int i = rowCount - 1; i >= 0; i--) { dm.removeRow(i); } Iterator<Entry<String, ArrayList<String>>> iterator = dictionary.getDictionary().entrySet().iterator(); while (iterator.hasNext()) { String syn = ""; int index = 0; Entry<String, ArrayList<String>> entry = iterator.next(); for (models.Iterator iter = dictionary.getIterator(entry.getKey()); iter.hasNext();) { syn += (index + 1) + "." + (String) iter.next() + " "; index++; } Object[] row = { entry.getKey(), syn }; ((DefaultTableModel) DictionaryFrame.getTable().getModel()).addRow(row); } } public class AddWordButtonActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { String word[] = MessageDialogs.addWordWindow(); String[] syn = splitWord(word[1]); dictionary.addWordAndSynonim(word[0], new ArrayList<String>(Arrays.asList(syn))); JSONParser.writeInJson(dictionary); printDictionary(); } } public class AddSynButtonActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { String word[] = MessageDialogs.addWordWindow(); dictionary.addSynonim(word[0], word[1]); JSONParser.writeInJson(dictionary); printDictionary(); } } public class DelWordButtonActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { String word = MessageDialogs.delWordWindow(); dictionary.deleteWord(word); JSONParser.writeInJson(dictionary); printDictionary(); } } public class DeleteSynButtonActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { String word[] = MessageDialogs.addWordWindow(); dictionary.deleteSynonim(word[0], word[1]); JSONParser.writeInJson(dictionary); printDictionary(); } } public class SearchButtonActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { String word = MessageDialogs.delWordWindow(); ArrayList<String> data = dictionary.search(word); if (data.size() == 0) { JOptionPane.showMessageDialog(null, "There is no such word in the dictionary!", "Info", JOptionPane.INFORMATION_MESSAGE); } else { String res = ""; for (int i = 0; i < data.size(); i++) { res = res + data.get(i) + "-> "; for (models.Iterator iter = dictionary.getIterator(data.get(i)); iter.hasNext();) { res = res + (String) iter.next() + ", "; } res = res.substring(0, res.length() - 2); res = res + "\n"; } JOptionPane.showMessageDialog(null, res, "Info", JOptionPane.INFORMATION_MESSAGE); } } } public class PopulateButtonActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { printDictionary(); } } public static String[] splitWord(String s) { String[] temp = s.split(", "); return temp; } }